//package org.znxs.znxsframe.mq_test;
//
//import com.rabbitmq.client.Channel;
//import com.rabbitmq.client.Connection;
//import com.rabbitmq.client.ConnectionFactory;
//import com.rabbitmq.client.DeliverCallback;
//
//
//public class MultiConsumer {
//
//    private static final String TASK_QUEUE_NAME = "multi_queue";
//
//    public static void main(String[] argv) throws Exception {
//        // 建立连接
//        ConnectionFactory factory = new ConnectionFactory();
//        factory.setHost("localhost");
//        final Connection connection = factory.newConnection();
//        for (int i = 0; i < 2; i++) {
//            // 建立频道
//            final Channel channel = connection.createChannel();
//            // 声明队列
//            channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);
//            System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
//            // 每个频道 最多同时处理 1 个任务
//            channel.basicQos(1);
//
//            // 定义了如何处理消息
//            int finalI = i;
//            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
//                String message = new String(delivery.getBody(), "UTF-8");
//
//                try {
//                    // 处理工作
//                    System.out.println(" [x] Received '" + "编号:" + finalI + ":" + message + "'");
//                    // 自定义处理同意策略 第二个参数multiple表示是否要一次性确认所有的历史消息直到当前这条
//                    channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
//                    // 停 20 秒，模拟机器处理能力有限
//                    Thread.sleep(20000);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                    // 第三个参数requeue 是否重新入队，可用于重试
//                    channel.basicNack(delivery.getEnvelope().getDeliveryTag(), false, false);
//                } finally {
//                    System.out.println(" [x] Done");
//                    channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
//                }
//            };
//            // 开启消费监听 参数：【1】队列名称  【2】是否开启自动同意策略
//            channel.basicConsume(TASK_QUEUE_NAME, false, deliverCallback, consumerTag -> {
//            });
//        }
//    }
//}
